<?php

/*****************************************************************************************
 * 常用通用的自定义函数
 * @copyright Copyright (c) 2025 webyjh.
 * @author    webyjh@163.com
 * @version   1.0.1
 *******************************************************************************************
 * 2025.03.11 增加IS_POST函数,增强了FalshMsg函数
 *
 */

//自定义Model函数，取代PG，分离model目录到应用
function M($modelName)
{
    require_once PG_PATH . '\\models\\' . $modelName . '.php';
    $modelName = 'models\\' . $modelName;
    $model     = new $modelName();
    return $model;
}

//请求参数取值，先取GET，后取POST，都空时，取默认值
function I($name, $default = null)
{
    return isset($_GET[$name]) ? $_GET[$name] : (isset($_POST[$name]) ? $_POST[$name] : $default);
}

// 返回更干净的JSON，PG的JSON函数会返回二维数组
function JSON($back = 'ok')
{die(json_encode($back, JSON_UNESCAPED_UNICODE));}

// 跳转到 URL
function GO($url)
{header('location:' . $url);exit();}

//设置 Set Session
function SS($k, $v)
{
    session_start();
    $_SESSION[$k] = $v;
    session_write_close();}

//设置 Set Session2 (可直接设置二维数组中某个值)
function SS2($k1, $k2, $v)
{
    session_start();
    $_SESSION[$k1][$k2] = $v;
    session_write_close();}

//获取 Get Session
function GS($k)
{return (isset($_SESSION[$k])) ? $_SESSION[$k] : null;}

//移除 Remove Session
function RS($k)
{
    session_start();unset($_SESSION[$k]);
    session_write_close();}

//清空 Clear Session
function CS()
{
    session_start(); //初始化session.
    $_SESSION = array(); //清空session变量
    if (isset($_COOKIE[session_name()])) {
        //由于session默认是基于cookie的，所以使用setcookie删除包含session id的cookie
        setcookie(session_name(), '', time() - 42000, '/');
    }
    session_destroy(); //彻底销毁session
}

// 打印信息：默认用print_r打印, 另可用var_dump打印
function P($v, $t = false)
{
    echo '<pre>';
    $t ? var_dump($v) : print_r($v);
    echo '</pre>';}

// 打印后退出
function PD($v){P($v);die();}

// 将访问记录写入access.log文件,实现简单的网站访问日志,效果如下
// [2020/11/14 14:28:04] -IP:192.168.2.204 -http://192.168.2.204:182/
// [2020/11/14 14:28:27] -IP:192.168.2.204 -http://192.168.2.204:182/index/task
function AccessLog()
{
    $file = fopen("_runtime/访问日志.log", "a") or die("不能打开文件!");
    $date = "[" . Date("Y/m/d H:i:s") . "]";
    $ip   = " -IP:" . $_SERVER["REMOTE_ADDR"];
    $url  = " -http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $txt  = $date . $ip . $url . "\n";
    fwrite($file, $txt);
    fclose($file);
}

// 闪现消息(跳转到相应URL后，显示消息) 注：需要配合前端使用
// 参数 跳转URL  
// 参数 消息
// 参数 消息标题
// 参数 图标
function FlashMsg($url, $msg, $title='',$icon=0)
{
    session_start();
      $_SESSION['flashMsg']['msg']  = $msg;      
      $_SESSION['flashMsg']['title'] = $title;
      $_SESSION['flashMsg']['icon'] = $icon;     
    session_write_close();
    header('location:' . $url);exit();
}

// 在Win系统上转换编码为GBK，防止上传文件名含中文时乱码
function utf2gbk($string)
{
    // 根据系统进行配置
    $encode = stristr(PHP_OS, 'WIN') ? 'GBK' : 'UTF-8';
    $string = iconv('UTF-8', $encode, $string);
    return $string;
}

// 返回文件名的主文件名
function mainName($file)
{ return pathinfo($file, PATHINFO_FILENAME);}

// 返回文件名的扩展名
function extName($file)
{ return pathinfo($file, PATHINFO_EXTENSION);}

// 根据文件大小切换单位,更友好的显示文件大小
function betterSize($size)
{
    $mod   = 1024;
    $units = explode(',', '字节,KB,MB,GB,TB,PB');
    for ($i = 0; $size > $mod; $i++) {
        $size /= $mod;
    }
    return round($size, 2) . $units[$i];
}


/**
 * 去除字符串中所有的空白字符
 * @param  string $str 需要替换的字符串
 * @return string   替换后的结果
 */
function TrimAllSpace($str)
{
    return preg_replace('/[\s　]+/', '', $str);
}

/**
 * 判断请求是不是POST
 * @return BOOL
 */

function IS_POST()
{
    $method = $_SERVER['REQUEST_METHOD'];
    return ($method==='POST')? true: false;
}


